class func_sets
{
 private var sum = 0
 def add(b: Byte) { sum += b }
 def checksum(): Int = ~(sum & 0xFF) + 1
}
import scala.collection.mutable.Map


//这里ChecksumAccumulator是func_sets的伴生对象
// 可以理解为Scala把类中的static集中放到了object对象中
object ChecksumAccumulator //因为object是静态的,静态方法属于类所有，类实例化前即可使用,object下面的成员都是静态的,伴生对象和类文件必须是同一个源文件,可以用伴生对象做一些初始化操作.
{

 private val cache = Map[String, Int]()

//所以下面的问题就是cache和s和cs



 def calculate(s: String): Int = //这里是返回值的类型,类型为Int,如果省略=的话,就会返回()
 if (cache.contains(s))//语法细节可以参考https://blog.csdn.net/howardwood/article/details/79580420
 cache(s)
 else 
 {
    val acc = new func_sets
    for (c <- s)//遍历s,每个c是s中的一个元素
    // println("c:\n"+c)
    acc.add(c.toByte)
    val cs = acc.checksum()//返回Int类型
    cache += (s -> cs)//map里面存入(key->value)数据
    println("---------------------------------------")
    // println("c:"+c)
    println("s:"+s)
    println("chache:"+cache)
    println("cs:"+cs)
    cs//这个意思是返回cs,类型是Int
 }

} 
// 不写明返回值的类型，程序会自行判断，最后一行代码的执行结果为返回值


// 参考链接:
// https://blog.csdn.net/zhu_si_tao/article/details/76412057